package com.ssss.template.exec2;

public abstract class AbstractClass {
    // 模板方法，用来控制炒菜的流程
    // 申明为final ,不希望子类覆盖这个方法，防止更改流程的执行顺序
    final void cookProcess(){
        // 第一步： 倒油
        pourOil();
        // 第二步 : 热油
        HeatOil();
        // 第三步： 放蔬菜
        puurVegetable();
        // 第四步： 放调料
        pourSauce();
        // 第五步 ： 翻炒
        fry();
    }

    /**
     *   定义结构里那些方法是所有过程都是一样的可复用的，那些是需要子类进行实现的
      */

    void pourOil(){
        System.out.println("倒油是一样的，所以直接实现");
    }

    void HeatOil(){
        System.out.println("热油一样，直接实现");
    }

    // 第三步 放蔬菜是不一样的 (一个下包菜，一个是下菜心)
    // 因为不一样，所以声明为抽象方法，具体由子类实现
    protected abstract void puurVegetable();

    // 第四步 放调料是不一样的(一个下辣椒，一个下蒜蓉)
    protected abstract void pourSauce();

    // 第五步 翻炒是一样的，所以直接实现
    void fry(){
        System.out.println("炒到熟为止");
    }



}
